从迭代到递归:思维的重构
递归 (Recursion) 是一种从本质上改变问题解决视角的方法论。在处理列表求和等问题时,迭代法(代码清单 4-2)依赖于显式的累加器 theSum 和循环状态控制;而递归法法则依赖于深刻的数学定义:
$$listsum(numList) = first(numList) + listsum(rest(numList))$$
递归不仅是一个函数调用自己,它将复杂问题分解为与其结构相同的更小规模的子问题,其核心在于识别大问题与子问题之间的自相似性。递归执行包含两个对称阶段:
- “递去”阶段:不断将列表切片并压入调用栈,直到触达可以解决的基准情况(Base Case)。
- “归来”阶段:从最简单的状态开始,逐层向上返回并合并结果。
核心直觉
迭代思维是“拿一个桶,把数字一个个丢进去加起来”;递归思维则是“如果你能告诉我剩下那些数的和是多少,我只要加上第一个数就行了”。